package com.manxi.mall.service.impl;

import com.manxi.mall.bean.TrafficUvCt;
import com.manxi.mall.mapper.TrafficStatsMapper;
import com.manxi.mall.service.TrafficStatsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.util.List;

/**
 * @author Addroc
 * @date 2024/6/14
 * 流量域统计Service接口实现类
 * 实现流量相关的各项统计功能
 */
@Service
public class TrafficStatsServiceImpl implements TrafficStatsService {

    @Autowired
    private TrafficStatsMapper trafficStatsMapper;

    /**
     * 获取某天各个渠道的独立访客（UV）数量
     * @param date 日期参数，格式为yyyyMMdd
     * @param limit 返回的渠道数量限制
     * @return 返回各渠道UV数量列表，按UV数量降序排列
     */
    @Override
    public List<TrafficUvCt> getChUvCt(Integer date, Integer limit) {
        // 调用Mapper查询数据库获取各渠道UV数量
        return trafficStatsMapper.selectChUvCt(date, limit);
    }

    /**
     * 获取某天各个地区的独立访客（UV）数量
     * @param date 日期参数，格式为yyyyMMdd
     * @return 返回各地区UV数量列表，按UV数量降序排列
     */
    @Override
    public List<TrafficUvCt> getRegionUvCt(Integer date) {
        // 调用Mapper查询数据库获取各地区UV数量
        return trafficStatsMapper.selectRegionUvCt(date);
    }

    /**
     * 获取某天各个设备的独立访客（UV）数量
     * @param date 日期参数，格式为yyyyMMdd
     * @return 返回各设备UV数量列表，按UV数量降序排列
     */
    @Override
    public List<TrafficUvCt> getDeviceUvCt(Integer date) {
        // 调用Mapper查询数据库获取各设备UV数量
        return trafficStatsMapper.selectDeviceUvCt(date);
    }

    /**
     * 获取某天各个页面的浏览量（PV）数量
     * @param date 日期参数，格式为yyyyMMdd
     * @return 返回各页面PV数量列表，按PV数量降序排列
     */
    @Override
    public List<TrafficUvCt> getPagePvCt(Integer date) {
        // 调用Mapper查询数据库获取各页面PV数量
        return trafficStatsMapper.selectPagePvCt(date);
    }

    /**
     * 获取某天的总PV（页面浏览量）数量
     * @param date 日期参数，格式为yyyyMMdd
     * @return 返回总PV数量
     */
    @Override
    public Long getTotalPv(Integer date) {
        // 调用Mapper查询数据库获取总PV数量
        return trafficStatsMapper.selectTotalPv(date);
    }

    /**
     * 获取某天的总UV（独立访客）数量
     * @param date 日期参数，格式为yyyyMMdd
     * @return 返回总UV数量
     */
    @Override
    public Long getTotalUv(Integer date) {
        // 调用Mapper查询数据库获取总UV数量
        return trafficStatsMapper.selectTotalUv(date);
    }

    /**
     * 获取某天新老访客分布情况
     * @param date 日期参数，格式为yyyyMMdd
     * @return 返回新老访客UV数量列表
     */
    @Override
    public List<TrafficUvCt> getNewOldUvCt(Integer date) {
        // 调用Mapper查询数据库获取新老访客分布
        return trafficStatsMapper.selectNewOldUvCt(date);
    }

    /**
     * 获取某天的会话数量
     * @param date 日期参数，格式为yyyyMMdd
     * @return 返回会话数量
     */
    @Override
    public Long getTotalSession(Integer date) {
        // 调用Mapper查询数据库获取会话数量
        return trafficStatsMapper.selectTotalSession(date);
    }

    /**
     * 获取某天的跳出率统计
     * @param date 日期参数，格式为yyyyMMdd
     * @return 返回跳出率（百分比）
     */
    @Override
    public BigDecimal getBounceRate(Integer date) {
        // 调用Mapper查询数据库获取跳出率
        return trafficStatsMapper.selectBounceRate(date);
    }

    /**
     * 获取某天各时段的UV分布
     * @param date 日期参数，格式为yyyyMMdd
     * @return 返回各时段UV数量列表
     */
    @Override
    public List<TrafficUvCt> getHourlyUvCt(Integer date) {
        // 调用Mapper查询数据库获取各时段UV分布
        return trafficStatsMapper.selectHourlyUvCt(date);
    }
}